#include <stdio.h>
#include <math.h>

#define ALPHA 20.0  // 压力角（单位：度）
#define HA_STAR 1.0  // 齿顶高系数
#define HF_STAR 1.25 // 齿根高系数
#define M_PI 3.14159265358979323846

void calculate_gears(double i, double m, double a) {
    int Z1, Z2;
    double d1, d2, db1, db2, da1, da2, df1, df2;

    // 计算小齿轮齿数（无论i大于还是小于1，都能正确区分）
    Z1 = round(2 * a / (m * (1 + i)));
    Z2 = round(i * Z1);

    // 确保 Z1 是小齿轮，Z2 是大齿轮
    if (Z1 > Z2) {
        int temp = Z1;
        Z1 = Z2;
        Z2 = temp;
    }

    // 计算直径
    d1 = m * Z1;
    d2 = m * Z2;
    db1 = d1 * cos(ALPHA * M_PI / 180.0);
    db2 = d2 * cos(ALPHA * M_PI / 180.0);
    da1 = d1 + 2 * HA_STAR * m;
    da2 = d2 + 2 * HA_STAR * m;
    df1 = d1 - 2 * HF_STAR * m;
    df2 = d2 - 2 * HF_STAR * m;

    // 输出结果
    printf("小齿轮齿数: %d\n", Z1);
    printf("大齿轮齿数: %d\n", Z2);
    printf("小齿轮分度圆直径: %.3f mm\n", d1);
    printf("大齿轮分度圆直径: %.3f mm\n", d2);
    printf("小齿轮基圆直径: %.3f mm\n", db1);
    printf("大齿轮基圆直径: %.3f mm\n", db2);
    printf("小齿轮齿顶圆直径: %.3f mm\n", da1);
    printf("大齿轮齿顶圆直径: %.3f mm\n", da2);
    printf("小齿轮齿根圆直径: %.3f mm\n", df1);
    printf("大齿轮齿根圆直径: %.3f mm\n", df2);
}

int main() {
    double i, m, a;

    // 输入参数
    printf("输入传动比 i: ");
    scanf("%lf", &i);
    printf("输入模数 m (mm): ");
    scanf("%lf", &m);
    printf("输入中心距 a (mm): ");
    scanf("%lf", &a);

    // 计算并输出结果
    calculate_gears(i, m, a);

    return 0;
}
